home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue57 / alfresco / tststr4.dpr < prev   
Encoding:
Text File  |  2000-04-08  |  1.8 KB  |  76 lines

  1. program tststr4;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows,
  7.   SysUtils;
  8.  
  9. function PosCh(aCh : char; const S : string; aStart : integer) : integer;
  10. var
  11.   i : integer;
  12. begin
  13.   for i := aStart to length(S) do
  14.     if (S[i] = aCh) then begin
  15.       Result := i;
  16.       Exit;
  17.     end;
  18.   Result := 0;
  19. end;
  20.  
  21. function UniqueChars1(const aSt : string) : string;
  22. var
  23.   i : integer;
  24. begin
  25.   Result := '';
  26.   for i := 1 to length(aSt) do begin
  27.     if (PosCh(aSt[i], Result, 1) = 0) then
  28.       Result := Result + aSt[i];
  29.   end;
  30. end;
  31.  
  32. function UniqueChars(const aSt : string) : string;
  33. var
  34.   i  : integer;
  35.   Ch : char;
  36.   DestInx : integer;
  37.   CharSet : set of char;
  38. begin
  39.   {clear the set of found characters}
  40.   FillChar(CharSet, sizeof(CharSet), 0);
  41.   {find the unique characters in the input string}
  42.   for i := 1 to length(aSt) do
  43.     Include(CharSet, aSt[i]);
  44.   {store the unique characters in the Result string}
  45.   SetLength(Result, length(aSt));
  46.   DestInx := 0;
  47.   for Ch := #0 to #255 do
  48.     if (Ch in CharSet) then begin
  49.       inc(DestInx);
  50.       Result[DestInx] := Ch;
  51.     end;
  52.   {readjust the length of the result string}
  53.   SetLength(Result, DestInx);
  54. end;
  55.  
  56. var
  57.   i : integer;
  58.   StartTime : DWORD;
  59. begin
  60.   writeln(UniqueChars1('abcdefghijklmnopababababababababaababbaabababababab'));
  61.   writeln(UniqueChars('abcdefghijklmnopababababababababaababbaabababababab'));
  62.  
  63.   writeln('testing normal routine...');
  64.   StartTime := GetTickCount;
  65.   for i := 1 to 100000 do
  66.     UniqueChars1('abcdefghijklmnopababababababababaababbaabababababab');
  67.   writeln('time taken: ', GetTickCount - StartTime);
  68.  
  69.   writeln('testing faster routine...');
  70.   StartTime := GetTickCount;
  71.   for i := 1 to 100000 do
  72.     UniqueChars('abcdefghijklmnopababababababababaababbaabababababab');
  73.   writeln('time taken: ', GetTickCount - StartTime);
  74.   readln;
  75. end.
  76.